home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB ReadScreenDemo ()
- DECLARE SUB demo2 ()
- DECLARE SUB demo1 ()
- DECLARE SUB scrolltext ()
- DECLARE SUB SubPause ()
- DECLARE SUB PrintxDemo ()
- DECLARE SUB StringArray ()
- DECLARE SUB machine ()
- DECLARE SUB NewBorders ()
- DECLARE SUB SimError ()
- DECLARE SUB attributes ()
- DECLARE SUB Fill ()
- DECLARE SUB open10 ()
- DECLARE SUB train ()
- DECLARE SUB inc (n)
- DECLARE SUB dec (n)
-
- '==================================================================
- REM $DYNAMIC
- REM $INCLUDE: 'Declare.Bas'
- '==================================================================
-
- OPTION BASE 1
-
- REDIM e$(100): CALL StringArray: 'initialize some strings for PrintxDemo
-
-
- '-----blank all four screens----
- COLOR 7, 0
- FOR page = 3 TO 0 STEP -1
- SCREEN , , page, page: CLS
- NEXT
-
-
- '----Initialize the string array for the main menu----
- RESTORE 100: REDIM m$(20)
- FOR x = 1 TO 20: READ m$(x): NEXT
-
- '----print the menu----
- OpenW 2, 7, 0, 1, 1, 14, 80
- CALL FillW(0, VARPTR(m$(1)))
-
- '------Define the active keys------
- exit$ = "sfvcdpbg"
-
- '---------Main Menu starts here------
- start:
-
- '----Wait for a keypress----
- i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
-
- '---------all the demos use screen 1--------------------
- IF INSTR(exit$, i$) THEN
- SCREEN , , 1, 0: 'Clear the screen before viewing it to
- CLS : ' make the transition cleaner
- SCREEN , , 1, 1: 'have basic view and print to screen 1
- CALL SetViewPage(1): ' switch windows to screen 1
- END IF
-
- SELECT CASE i$
- CASE "s": CALL train: CALL machine
- CASE "f": CALL Fill
- CASE "v": CALL attributes
- CASE "c": CALL open10
- CASE "d": CALL SimError
- CASE "p": CALL PrintxDemo
- CASE "b": CALL NewBorders
- CASE "q": END
- CASE "g": CALL demo2: CALL scrolltext: CALL demo1
- CASE "r": CALL ReadScreenDemo
-
- CASE ELSE
-
- END SELECT
-
- '--------------Restore the main menu by switching back to screen 0---------
- SCREEN , , 0, 0: CALL SetViewPage(0)
- GOTO start
-
- '==========================================================================
-
- 100 DATA " Examples",," S Scrollx"," F Fill Window"
- DATA " V View Attributes"," C CloseLastW"
- DATA " D Call DebugW "," B User defined borders"
- DATA " P Printx Demo "
- DATA " G Scroll Left in Graphics Mode"
- DATA " R ReadScreen Demo"
- DATA " Q Quit"
- DATA ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-
- 200 DATA ".eiee[] o---o o---o o---o o---o o---o o---o eee[]e "
-
- ResumeNext: EE = ERR: RESUME NEXT
-
- REM $STATIC
- '===========================================================================
- SUB attributes STATIC
- CLS : DEF SEG = &HB900: 'segment of screen 1
- LOCATE 10, 30: PRINT "Decimal"; : LOCATE 20, 30: PRINT "Hex";
- LOCATE 25, 1: PRINT "Press any key to quit"
-
- '----------------print all the a ttributes in decimal-----------
- LOCATE 1, 1, 0
- x = 0: DO UNTIL x = 127
- PRINT USING "#####"; x;
-
- FOR y = 1 TO 9 STEP 2
- POKE x * 10 + y, x
- NEXT: i$ = INKEY$: IF i$ <> "" THEN EXIT DO
- x = x + 1: LOOP
-
- '-------Print all the attributes in hex-----------------
- LOCATE 11, 1
- x = 0: DO UNTIL x = 127
- i$ = INKEY$: IF i$ <> "" THEN EXIT SUB
- PRINT USING "\ \"; HEX$(x);
-
- FOR y = 1 TO 9 STEP 2
- POKE x * 10 + y + 1600, x
- NEXT: i$ = INKEY$: IF i$ <> "" THEN EXIT DO
- x = x + 1: LOOP
-
- Printt CHR$(10), 7, 25, 1: 'erase message
-
- Printt "Press any key to call SwapAttr", 7, 20, 1
- CALL SubPause:
- Printt "Press any key to call SwapAttr", 7, 21, 1: CALL SwapAttr
-
- CALL SubPause:
- Printt "Press any key to call ChangeAttr(15)", &H70, 22, 1: CALL SwapAttr
-
- CALL SubPause:
- Printt "Press any key to call ChangeAttr(&h70)", 7, 23, 1
- CALL ChangeAttr(15)
-
- CALL SubPause:
- Printt "Press any key to call SwapAttr" + CHR$(10), 15, 24, 1
- CALL ChangeAttr(&H70)
- CALL SubPause:
- CALL SwapAttr
- Printt "Press any key...", 7, 25, 1
-
- CALL SubPause
-
-
- END SUB
-
- SUB dec (n) STATIC
- n = n - 1
- END SUB
-
- SUB demo1 STATIC
- SCREEN 2, , 0, 0: CLS
- 'move a triangle wave
-
- y = 86: z = -1
- LINE (0, 23)-(639, 23)
- LINE (0, 88)-(639, 88)
-
- i$ = "": DO UNTIL i$ <> ""
- FOR x = 632 TO 639
- PSET (x, y)
- y = y + z
- IF y < 32 THEN z = 1 ELSE IF y > 86 THEN z = -1
- NEXT x
-
- CALL GScrollL8(24, 0, 87, 639)
- i$ = INKEY$: LOOP
- RUN
- END SUB
-
- SUB demo2 STATIC
- SCREEN 0, 1, 0, 0
- SCREEN 2: CLS
- 'rack up some balls
-
- CIRCLE (559, 50), 30:
- FOR y = 1 TO 66: CALL GScrollL8(20, 0, 80, 639): NEXT
-
- CIRCLE (559, 50), 30:
- FOR y = 1 TO 56: CALL GScrollL8(20, 80, 80, 639): NEXT
-
- CIRCLE (559, 50), 30:
- FOR y = 1 TO 46: CALL GScrollL8(20, 160, 80, 639): NEXT
-
- CIRCLE (559, 50), 30:
- FOR y = 1 TO 36: CALL GScrollL8(20, 240, 80, 639): NEXT
- INPUT "Pause....."; x$
-
- END SUB
-
- REM $DYNAMIC
- SUB Fill STATIC
- SHARED EE: 'error code from resumenext
- 'note that larger boxes don't print slower - all the time is taken by basic
- 'this routine prints tab character, may need to filter the file to expand them
- f$ = "WDemo.bas":
- LOCATE 2, 21, 0: x$ = CHR$(220) + CHR$(220) + CHR$(220)
- x$ = x$ + CHR$(221) + CHR$(32) + CHR$(222)
- x$ = x$ + CHR$(223) + CHR$(223) + CHR$(223)
- CALL defborder(x$):
- BeginFill:
- CLS
- PRINT "Scroll "; CHR$(25); " "; CHR$(26); " "; CHR$(27); " "; CHR$(24);
- PRINT " PageUp PageDown Home End tab shift/tab"
- PRINT "Change border b"
- PRINT "New file f"
- PRINT "Window size + -"
- PRINT "Quit <esc>"
-
- PgUp$ = CHR$(0) + CHR$(73): PgDn$ = CHR$(0) + CHR$(81)
- Up$ = CHR$(0) + CHR$(72): down$ = CHR$(0) + CHR$(80)
- lft$ = CHR$(0) + CHR$(75): rght$ = CHR$(0) + CHR$(77)
- Ins$ = CHR$(0) + CHR$(82): del$ = CHR$(0) + CHR$(83): backspace$ = CHR$(0) + CHR$(8)
- home$ = CHR$(0) + CHR$(71): end$ = CHR$(0) + CHR$(79): ShiftTab$ = CHR$(0) + CHR$(15)
- cr$ = CHR$(13): esc$ = CHR$(27): tab$ = CHR$(9): esc$ = CHR$(27)
- r = 5: n = 0: lastline = 1: bb = 2
- xx = 2000: REDIM a%(xx): REDIM a$(1000)
- '-------------------------Load a text file to view--------------------------
- StartFill:
- EE = 0: ON ERROR GOTO ResumeNext
- '===========================================================================
- CLOSE : OPEN "i", #3, f$
- LOCATE 10, 30: PRINT "Loading "; f$
-
- IF EE <> 0 THEN
- CLOSE
- IF f$ <> "" THEN LOCATE 10, 30: PRINT f$; " not found ";
- LOCATE 12, 1: PRINT SPC(79); : LOCATE 12, 1, 1
- INPUT "Name of a text file to view or <enter> to quit "; f$
- IF f$ = "" THEN EXIT SUB ELSE GOTO StartFill
- END IF
- ON ERROR GOTO 0
- PRINT TAB(30); "Press <Esc> to stop"
- DO UNTIL EOF(3): LINE INPUT #3, a$(lastline)
- LOCATE 9, 40: PRINT USING "####"; lastline
- inc lastline
- i$ = INKEY$: IF i$ = esc$ THEN EXIT DO
- LOOP: CLOSE #3
- LOCATE 11, 30: PRINT SPC(79);
- '-------------------------Set up a window-----------------------------------
-
- openWindow:
- IF r < 1 THEN r = 1 ELSE IF r > 10 THEN r = 10
- CALL OpenW(bb, &H7, VARSEG(a%(1)), 11 - r, 36 - 3.5 * r, 14 + r, 45 + 3.5 * r)
-
- '-------------------------Print the file in the window----------------------
- printwindow:
- IF L > lastline - r * 2 THEN L = lastline - r * 2
- IF L < 1 THEN L = 1
- IF n < 0 THEN n = 0 ELSE IF n > 120 THEN n = 120
- CALL FillW(n, VARPTR(a$(L)))
-
- i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
-
- SELECT CASE i$
- CASE "f", "F": f$ = "": GOTO BeginFill
- CASE Up$: dec L
- CASE down$: inc L
- CASE lft$: inc n
- CASE rght$: dec n
- CASE "b": inc bb: IF bb = 5 THEN bb = 0: CALL CloseLastW: GOTO openWindow ELSE CALL CloseLastW: GOTO openWindow
- CASE tab$: n = n + 5
- CASE ShiftTab$: n = n - 5
- CASE esc$: ERASE a%: ERASE a$: EXIT SUB
- CASE PgUp$: L = L - r * 2
- CASE PgDn$: L = L + r * 2
- CASE home$: n = 0: L = 1
- CASE end$: L = 99000
- CASE "-": dec r: CALL CloseLastW: GOTO openWindow
- CASE "+": inc r: CALL CloseLastW: GOTO openWindow
- CASE ELSE
- END SELECT: GOTO printwindow
-
- END SUB
-
- REM $STATIC
- SUB inc (n) STATIC
- n = n + 1
- END SUB
-
- REM $DYNAMIC
- '===========================================================================
- SUB machine STATIC
- COLOR 0, 7: CLS
- LOCATE 3, 1:
- PRINT " "
- PRINT " "
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
- PRINT " "
- REDIM c%(800)
- CALL saveW(VARSEG(c%(1)), 3, 5, 9, 40)
-
- LOCATE 3, 1
- PRINT " xxxxxxxxxxxx"
- PRINT " xxxxxxxxxxxxxxxxxxxxxx "
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxxx "
- PRINT " xxxxxxxxxxxxxxxxxxxxxxxx "
- PRINT " xxxxxxxxxxxxxxxxxxxxxxx "
- PRINT " xxxxxxxxxxxxxxxxxxxx "
- PRINT "xxxxxxxxxxxxx "
-
- REDIM ccc%(800)
- CALL saveW(VARSEG(ccc%(1)), 3, 5, 9, 40)
-
- CLS
-
-
- CALL OpenW(0, 0, 0, 10, 50, 23, 54): 'Draw a black box
- LOCATE 24, 1, 0
- PRINT " A B C D E F G H I J K L M N";
- y = 97: DO UNTIL y = 123
- i$ = INKEY$: IF i$ <> "" THEN EXIT DO
- '----go left and up
- FOR pause = 1 TO 10: NEXT
- FOR x = 1 TO 7: CALL scrollL(&H70, 1, 1, 44, 23, 60): NEXT
- CALL closew(VARSEG(ccc%(1)), 2, 5, 8, 40): 'print arm in up position
- FOR x = 1 TO 10: CALL scrollu(&H70, 1, 1, 44, 23, 60): NEXT
-
- '---go right and down
- FOR pause = 1 TO 10: NEXT
- FOR x = 1 TO 7: CALL scrollr(&H70, 1, 1, 44, 23, 60): NEXT
- CALL closew(VARSEG(c%(1)), 2, 5, 8, 40): 'print arm in down position
- FOR x = 1 TO 10: CALL scrolld(&H70, 1, 1, 44, 23, 60): NEXT
-
- 'scroll the letters
- LOCATE 24, 52: PRINT CHR$(y); : ' small letter
- IF y < 110 THEN LOCATE 24, 79: PRINT CHR$(y - 19); : 'capital letter
-
- CALL scrollL(&H70, 2, 24, 1, 25, 52)
- CALL scrollL(&H70, 2, 24, 53, 25, 79)
-
- 'FOR pause = 1 TO 100: NEXT
- inc y: LOOP
-
- FOR pause = 1 TO 250: NEXT
- COLOR 7, 0
- ERASE c%: ERASE ccc%
- END SUB
-
- '===========================================================================
- SUB NewBorders STATIC
- CLS
- LOCATE 2, 1, 0: x$ = "123456789":
- PRINT x$;
- CALL defborder(x$):
- CALL OpenW(4, &H3, 0, 4, 2, 8, 8)
-
- LOCATE 2, 21, 0: x$ = CHR$(220) + CHR$(220) + CHR$(220)
- x$ = x$ + CHR$(221) + CHR$(32) + CHR$(222)
- x$ = x$ + CHR$(223) + CHR$(223) + CHR$(223)
- PRINT x$;
- CALL defborder(x$):
- CALL OpenW(4, &H3, 0, 4, 22, 8, 28)
-
- LOCATE 2, 41, 0: x$ = CHR$(236) + CHR$(240) + CHR$(236)
- x$ = x$ + CHR$(177) + CHR$(32) + CHR$(177)
- x$ = x$ + CHR$(236) + CHR$(240) + CHR$(236)
- PRINT x$;
- CALL defborder(x$):
- CALL OpenW(4, &H3, 0, 4, 42, 8, 48)
-
- LOCATE 2, 61, 0: x$ = CHR$(176) + CHR$(176) + CHR$(176)
- x$ = x$ + CHR$(219) + CHR$(32) + CHR$(219)
- x$ = x$ + CHR$(176) + CHR$(176) + CHR$(176)
- PRINT x$;
- CALL defborder(x$):
- CALL OpenW(4, &H3, 0, 4, 62, 8, 68)
-
- INPUT x$
- END SUB
-
- '===========================================================================
- SUB open10 STATIC
- r = 2000
- REDIM a%(r): REDIM b%(r): REDIM c%(r): REDIM d%(r): REDIM e%(r)
- REDIM f%(r): REDIM g%(r): REDIM h%(r): REDIM i%(r): REDIM j%(r)
- pause = 12
-
-
- CALL OpenW(2, &H70, VARSEG(a%(1)), 11, 36, 15, 44)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(b%(1)), 9, 34, 17, 48)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(c%(1)), 8, 29, 18, 52)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(d%(1)), 7, 25, 19, 56)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(e%(1)), 6, 21, 20, 60)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(f%(1)), 5, 17, 21, 64)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(g%(1)), 4, 13, 22, 68)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(h%(1)), 3, 9, 23, 72)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(i%(1)), 2, 5, 24, 76)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H70, VARSEG(j%(1)), 1, 1, 25, 80)
- FOR x = 1 TO 200: NEXT
-
- FOR x = 1 TO 10:
- CALL CloseLastW:
- FOR xx = 1 TO 20: NEXT
- NEXT
-
- '-------------------------------------------------
- CALL OpenW(2, &H70, VARSEG(a%(1)), 1, 1, 15, 20)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H2, VARSEG(b%(1)), 2, 4, 16, 24)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H3, VARSEG(c%(1)), 3, 8, 17, 28)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H5, VARSEG(d%(1)), 4, 12, 18, 32)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H6, VARSEG(e%(1)), 5, 16, 19, 36)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, &H7, VARSEG(f%(1)), 6, 20, 20, 40)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, 10, VARSEG(g%(1)), 7, 24, 21, 44)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, 11, VARSEG(h%(1)), 8, 28, 22, 48)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, 14, VARSEG(i%(1)), 9, 32, 23, 52)
- FOR x = 1 TO pause: NEXT
- CALL OpenW(2, 91, VARSEG(j%(1)), 10, 36, 24, 56)
- FOR x = 1 TO 200: NEXT
-
- FOR x = 1 TO 10:
- CALL CloseLastW:
- FOR xx = 1 TO 20: NEXT
- NEXT
-
- ERASE a%: ERASE b%: ERASE c%: ERASE d%: ERASE e%: ERASE f%:
- ERASE g%: ERASE h%: ERASE i%: ERASE j%:
- END SUB
-
- REM $STATIC
- SUB pages STATIC
- 'tests if printx prints to correct pages
-
- FOR x = 0 TO 3: SCREEN , , x, x: CLS : NEXT
- SCREEN , , 1, 1: CALL SetViewPage(1)
- CALL OpenW(2, &H77, 0, 5, 5, 20, 40)
- CALL PrintW("Hello", 7, 2, 2)
-
- CALL SetViewPage(0): CALL Printt("Page0", 7, 10, 10)
- CALL SetViewPage(1): CALL Printt("Page1", 7, 10, 10)
- CALL SetViewPage(2): CALL Printt("Page2", 7, 10, 10)
- CALL SetViewPage(3): CALL Printt("Page3", 7, 10, 10)
-
-
- FOR x = 0 TO 3: SCREEN , , x, x: PRINT "Page "; x; : INPUT x$: NEXT
- FOR x = 0 TO 3: SCREEN , , x, x: PRINT "Page "; x; : INPUT x$: NEXT
- END
-
- END SUB
-
- SUB PrintxDemo STATIC
- SHARED e$()
- CALL SetViewPage(1): SCREEN , , 1, 1
-
- FOR px = 1 TO 3: 'Once for each type of call
-
- '---------------------------initialize the screen--------------------
- CLS :
- FOR x = 1 TO 16: LOCATE x, 6: PRINT x; : NEXT
- LOCATE 17, 1: FOR x = 1 TO 6: PRINT "1234567890"; : NEXT
- Printt "Next string to print is", 7, 18, 1
- LOCATE 3, 1
- IF px = 1 THEN PRINT "Call to PrintW"
- IF px = 2 THEN PRINT "Call to PrintW $ + chr$(13)"
- IF px = 3 THEN PRINT "Call to PrintW $ + chr$(10)"
-
- '----------------------initialize the window-------------------------------
- attr% = &H70: r% = 5: c% = 11
- tr = 4: lc = 10: br = 16: rc = 66
- CALL OpenW(2, 7, 0, tr, lc, br, rc)
- 'CALL temp
- '---print R, C, and the next string to be printed and locate the cursor----
- FOR x = 1 TO 13
- LOCATE 1, 40, 0: PRINT "R% = "; r%; " C% = "; c%
- rr% = 19: cc% = 1
- Printt e$(x), &H70, rr%, cc%
-
- Printt CHR$(13), &H7, rr%, cc%
- Printt CHR$(13), &H7, rr%, cc%
- IF r% = 16 THEN LOCATE 22, 1: PRINT "Note the cursor goes out of bounds instead of scrolling the last line"
- LOCATE r%, c%, 1, 1, 12: 'block cursor
- 'if window has no border, use this formula:
- 'LOCATE r% + tr - 1, c% + lc - 1, 1, 1, 12
-
-
-
- '------------------------Pause, then make the call to PrintW---------------
- i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
-
- IF px = 1 THEN PrintW e$(x), attr%, r%, c%
- IF px = 2 THEN PrintW e$(x) + CHR$(13), attr%, r%, c%
- IF px = 3 THEN PrintW e$(x) + CHR$(10), attr%, r%, c%
- 'IF px = 3 AND x = 8 THEN PrintW e$(x) + CHR$(10), attr%, r%, c%
- NEXT
- NEXT px
- END SUB
-
- SUB scrolltext STATIC
- SCREEN 2, 0, 0, 0: CLS
- 'characters in screen 2 are 8 by 8 so it is easy to scroll one char at a time
- 'draw a pattern
- FOR x = 1 TO 20
- PRINT "Hello 1 2 3 4 5 6 7 8 9 0 q w e r t y u i o p z x c v b n m , . / a s h j k l []"
- NEXT
-
- 'define the window size where row (a&c) is 1 to 25 and columns (b & d)
- 'are 1 to 80
- a = 3: b = 1: c = 6: d = 80
-
- 'convert rows & columns to 0-199 and 0-639 format
- tr = (a - 1) * 8: lc = (b - 1) * 8: br = c * 8 - 1: rc = (d - 1) * 8
-
- PRINT tr, lc, br, rc: INPUT "Pause....."; x$
-
- 'scroll 8 characters left
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- CALL GScrollL8(tr, lc, br, rc)
- INPUT "Pause....."; x$
- END SUB
-
- '===========================================================================
- SUB SimError STATIC
- CALL DebugW
- END SUB
-
- SUB StringArray
- SHARED e$()
- OPEN "i", #3, "declare.bas"
- FOR x = 1 TO 30
- LINE INPUT #3, e$(x)
- NEXT
- END SUB
-
- SUB SubPause
- i$ = "": DO UNTIL i$ <> "": i$ = INKEY$: LOOP
- END SUB
-
- REM $DYNAMIC
- '===========================================================================
- SUB train STATIC
-
- CLS : pause = 4
- PRINT " f/faster s/slower esc/quit delay ="
- LOCATE 1, 60: PRINT USING "###"; pause;
- RESTORE 200: READ x$
- FOR x = 1 TO LEN(x$)
- LOCATE 10, 80
- PRINT MID$(x$, x, 1);
- CALL scrollL(&H7, 1, 10, 1, 10, 80)
- CALL scrolld(&H7, 1, 1, 5, 16, 5)
- CALL scrollr(7, 1, 16, 1, 16, 80)
- CALL scrollu(7, 1, 10, 80, 16, 80)
- NEXT
- DO
- CALL scrollL(&H7, 1, 10, 1, 10, 80)
- CALL scrolld(&H7, 1, 1, 5, 16, 5)
- CALL scrollr(7, 1, 16, 1, 16, 80)
- CALL scrollu(&H7, 1, 10, 80, 16, 80)
- FOR y = 1 TO pause: NEXT
- i$ = INKEY$:
- IF i$ = CHR$(27) THEN EXIT DO
- IF i$ <> "" THEN GOSUB TrainKeyPress
- LOOP
- xs = 16: yy = 0
- FOR x = 1 TO 250
- 'IF yy = 46 GOTO ExitTrain
- y = SCREEN(16, 79)
- 'LOCATE 1, 1: PRINT y: INPUT x$
- IF y = 46 THEN xs = 15: x = 200: yy = 46
- ExitTrain:
- CALL scrollL(&H7, 1, 10, 1, 10, 80)
- CALL scrolld(&H7, 1, 1, 5, 16, 5)
- CALL scrollr(7, 1, 16, 1, 16, 80)
- CALL scrollu(&H7, 1, 10, 80, xs, 80)
- 'LOCATE 20, 1: PRINT y; : PRINT " "; SCREEN(16, 80): INPUT x$
- NEXT
-
- EXIT SUB
-
- TrainKeyPress:
- IF i$ = "f" AND pause > 0 THEN dec pause
- IF i$ = "s" AND pause < 100 THEN inc pause
- LOCATE 1, 60: PRINT USING "###"; pause;
- RETURN
-
- END SUB
-
-